package bean.dao;

import java.util.Iterator;
import java.util.List;

import hbt.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import bean.Cuenta;
import bean.Movimiento;
import bean.RenglonMovimiento;

public class HibernateTesoreriaDAO {
	private static HibernateTesoreriaDAO instancia = null;
	private static SessionFactory sf = null;

	public static HibernateTesoreriaDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new HibernateTesoreriaDAO();
		} 
		return instancia;
	}
	
	public void grabarCuenta(Cuenta cuenta){
		Session session = sf.openSession();
		session.beginTransaction();
		session.persist(cuenta);
		session.flush();
		session.getTransaction().commit();
		session.close();
	}
	
	public void grabarMoviento(Movimiento movimiento){
		Session session = sf.openSession();
		session.beginTransaction();
		session.persist(movimiento);

//		for (Iterator iterator = movimiento.getRenglones().iterator(); iterator.hasNext();) {
//			RenglonMovimiento  r = (RenglonMovimiento) iterator.next();
//			session.persist(r);
//		}
		
		session.flush();
		session.getTransaction().commit();
		session.close();
	}

	public List<Cuenta> obtenerCuentas() {
		// TODO Auto-generated method stub
		Session session = sf.openSession();
		List<Cuenta> cuentas = session.createQuery("from Cuenta").list();
		session.close();
		return cuentas;
	}

	public List<Movimiento> obtenerMovimientos() {
		// TODO Auto-generated method stub
		Session session = sf.openSession();
//		List<Movimiento> movimientos = session.createQuery("select m.RenglonMovimientoId.numero from Movimiento m ").list();
		List<Movimiento> movimientos = session.createQuery("select m.numero from KK m ").list();
//		List<Movimiento> movimientos = session.createQuery("from Movimiento").list();
		session.close();
		return movimientos;
	}
	
	public List<RenglonMovimiento> obtenerRenglones(){
		Session session = sf.openSession();
		List<RenglonMovimiento> renglones = session.createQuery("from RenglonMovimiento").list();
		session.close();
		return renglones;
	}

}